List 인터페이스

✒️ 2025-05-27 16:51 내용 수정


List 인터페이스

순서가 있는 데이터 집합이고,데이터 중복을 허용한다.


인터페이스 메서드

List 인터페이스 메서드 설명
void add(E, e) 데이터를 순서대로 추가함
void add(int index, E e) 데이터를 원하는 index 위치에 추가함
void set(int index, E e) 원하는 index 위치의 값을 변경
boolean equals(Object o) 리스트와 전달된 객체가 같은지 확인
E get(int index) 선택된 index 위치의 값을 반환
void remove(int index) 선택된 index 위치의 값을 제거
void clear() 모든 데이터 제거
int size() 저장된 데이터의 개수를 반환
boolean contains(Object o) 데이터 존재 여부 확인
Object[] toArray() 해당 리스트의 모든 요소를 Object 타입의 배열로 반환
boolean isEmpty() 해당 리스트가 비었는지 확인
Iterator<E> iterator() 해당 리스트의 반복자(iterator)를 반환
void sort(Collections.naturalOrder) 오름차순으로 정렬. 내부 파라미터에 따라 옵션이 다르다

List와 Array간 변환

1) List를 Array로 변환

  1. for문을 사용해서 요소들을 하나씩 넣어주기
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);

int[] arr = new int[2];

for (int i = 0; i < list.size(); i++) {
	arr[i] = list.get(i);
}
  1. stream().mapToType().toArray()toArray(arrayType[])로 변환
List<Integer> list = new ArrayList<>();

int[] arr = list.streamintValue).toArray(;
int[] arr2 = list.toArray(new int[2]);

2) Array를 List로 변환

  1. Arrays.asList() 메서드 사용
List<T> list = Arrays.asList(array);
  1. Arrays.stream().collect() 메서드 사용
List<T> list = Arrays.stream(array).collect(Collectors.toList());

List 인터페이스 구현체(ArrayList와 LinkedList)

항목 ArrayList LinkedList
기본 구조 동적 배열(Dynamic Array) 이중 연결 리스트(Doubly Linked List)
메모리 사용 연속된 메모리 공간을 사용하여 상대적으로 메모리 효율적 각 노드가 데이터와 포인터를 가지므로 메모리 사용량이 더 많음
인덱스 접근 속도 빠름 (O(1)) 느림 (O(n))
중간 삽입/삭제 속도 느림 (O(n)) - 요소 이동 필요 빠름 (O(1) 앞쪽), 중간은 탐색 필요 (O(n))
끝에 삽입/삭제 속도 빠름 (O(1)), 단, 배열 크기 초과 시 재할당 필요 빠름 (O(1))
검색 성능 빠름 (O(1)) - 인덱스 기반 접근 느림 (O(n)) - 순차 탐색 필요
메서드 지원 List 인터페이스 구현 List, Deque, Queue 인터페이스 구현
활용 예시 데이터 저장 및 빈번한 조회가 필요한 경우 데이터의 빈번한 삽입/삭제가 필요한 경우
메모리 할당 방식 연속된 메모리 공간에 할당 비연속적인 메모리 공간에 할당
사용 시 주의점 중간 삽입/삭제 시 성능 저하 가능성 인덱스 기반 접근 시 성능 저하 가능성

1. ArrayList

List<T> 인스턴스이름 = new ArrayList<T>();

ArrayList.png

2. LinkedList

List<T> 인스턴스이름 = new LinkedList<T>();

LinkedList.png


Stack

Vector 클래스를 확장하여 스택의 동작을 제공하는 스택 자료 구조 클래스

Stack<T> 인스턴스이름 = new Stack<T>();
메서드 설명
push(E item) 스택의 꼭대기에 요소를 추가
E pop() 스택의 꼭대기에 있는 요소를 제거하고 반환
peek() 스택의 꼭대기에 있는 요소를 반환하되, 제거하지 않음
boolean isEmpty() (Vector) 스택이 비어있으면 true, 그렇지 않으면 false를 반환
boolean empty() (Stack) 스택이 비어있으면 true, 그렇지 않으면 false를 반환
E search(Object o) 스택에서 지정된 요소를 찾고, 해당 요소가 스택의 꼭대기로부터 얼마나 떨어져 있는지 반환
void clear() 스택 비우기
boolean contains(Object o) 스택에 o가 있는지 확인
E elementAt(int index) 스택의 인덱스 index 위치에 있는 요소를 반환
E lastElement() 스택의 마지막 위치의 요소를 반환
int lastIndexOf(Object o) 스택에 o의 인덱스들 중 마지막 인덱스 반환
boolean remove(Object o) 스택에 o를 제거
E remove(int index) 스택의 인덱스 index 위치의 요소를 제거
Stream E stream() 스택을 stream으로 변환
void setSize(int newSize) 스택의 크기를 newSize로 변경
set(int index, T element) 스택의 인덱스 index 위치의 요소를 element로 변환
sort(Comparator c) Comparator c 방법으로 스택을 정렬
Object toArray() 스택을 Object 배열로 변환
String toString() 스택을 String으로 변환